static int cb_rtnl_valid(struct nl_msg *msg, void *arg);
static void catch_rtnl_err(struct odhcpd_event *e, int error);
+static int addr6_dump_rqs = 0;
static int ping_socket = -1;
static struct event_socket rtnl_event = {
.ev = {
nlmsg_free(msg);
}
-static void dump_addr_table(void)
+static void dump_addr6_table(void)
{
struct nl_msg *msg;
struct ifaddrmsg ifa = {
nlmsg_free(msg);
}
+void ndp_handle_addr6_dump(void)
+{
+ if (!addr6_dump_rqs)
+ return;
+
+ dump_addr6_table();
+ addr6_dump_rqs = 0;
+}
+
+inline void ndp_rqs_addr6_dump(void)
+{
+ addr6_dump_rqs++;
+}
+
int setup_ndp_interface(struct interface *iface, bool enable)
{
int ret = 0, procfd;
dump_neigh = true;
}
- if (enable && (iface->ra == RELAYD_SERVER ||
- iface->dhcpv6 == RELAYD_SERVER || iface->ndp == RELAYD_RELAY))
- dump_addr_table();
-
if (enable && iface->ndp == RELAYD_RELAY) {
if (write(procfd, "1\n", 2) < 0) {}
dump_neigh_table(false);
else
dump_neigh = false;
+
+ ndp_rqs_addr6_dump();
}
if (dump_neigh)
if (nl_socket_set_buffer_size(ev_sock->sock, ev_sock->sock_bufsize, 0))
goto err;
- dump_addr_table();
+ dump_addr6_table();
return;
err: